package com.demon.framework.util.page;

import com.demon.framework.common.model.entity.BaseQuery;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;

/**
 * @author Demon-HY
 * @description mybatis 分页工具类
 * @date 2020/7/12 14:02
 */
public class PageHelperUtil {

    /**
     * 分页
     *
     * @param query 查询参数
     */
    public static void startPage(BaseQuery query) {
        query.setPageSize(Math.min(query.getPageSize(), 50));

        startPage(query.getPageNo(), query.getPageSize(), true);
        orderBy(query.getOrderBy());
    }

    /**
     * 分页
     *
     * @param pageNo   页码
     * @param pageSize 查询条数,最大50条
     */
    public static void startPage(int pageNo, int pageSize) {
        pageSize = Math.min(pageSize, 50);
        startPage(pageNo, pageSize, true);
    }

    /**
     * 分页
     *
     * @param pageNo   页码
     * @param pageSize 查询条数,最大50条
     * @param count    是否计算总count
     */
    public static void startPage(int pageNo, int pageSize, boolean count) {
        pageSize = Math.min(pageSize, 50);

        PageHelper.startPage(pageNo, pageSize, count);
    }

    /**
     * 分页
     *
     * @param pageNo   页码
     * @param pageSize 查询条数,最大50条
     * @param orderBy  排序: "id desc"
     */
    public static void startPage(int pageNo, int pageSize, String orderBy) {
        startPage(pageNo, pageSize, true);
        orderBy(orderBy);
    }

    /**
     * 游标分页
     *
     * @param offset   开始游标
     * @param pageSize 查询条数,最大50条
     * @param count    是否计算总count
     */
    public static void offsetPage(int offset, int pageSize, boolean count) {
        PageHelper.offsetPage(offset, pageSize, count);
    }

    /**
     * 游标分页
     *
     * @param offset   开始游标
     * @param pageSize 查询条数,最大50条
     * @param orderBy  排序: "id desc"
     */
    public static void offsetPage(int offset, int pageSize, String orderBy) {
        offsetPage(offset, pageSize, true);
        orderBy(orderBy);
    }

    /**
     * 排序: "id desc"
     */
    public static void orderBy(String orderBy) {
        if (StringUtils.isBlank(orderBy)) {
            return;
        }
        PageHelper.orderBy(orderBy);
    }
}
